package com.demo.study.base.jvm;

/**
 * @author baymax
 * @since 2025-07-10
 */
public class T07_String {
    public static void main(String[] args) {
        String str1 = "a";
        String str2 = "b";
        String str3 = "ab";

        String str4 = str1 + str2; //new StringBuilder().append("a").append("b").toString(); => new String("ab");
        String str5 = "a" + "b"; // 两个常量拼接，编译期间，虚拟机认为不可变，直接当作ab处理
        String str6 = str4.intern(); // 将堆内存中的数据，尝试放到串池中，如果串池不存在，则放入成功，如果存在，则失败并返回池中的地址

        System.out.println(str3 == str4); // false
        System.out.println(str3 == str5); // true
        System.out.println(str3 == str6); // true

        String x1 = new String("c") + new String("d");
        String x2 = "cd";
        x1.intern(); // 池中已经有了，放入失败
        System.out.println(x1 == x2); // false

        String x3 = new String("e") + new String("f");
        x3.intern(); // 池中没有，放入成功
        String x4 = "ef";
        System.out.println(x3 == x4); // true parallel ConcurrentMarkSweepGc
    }
}
